Mysql数据库意外崩溃导致表数据文件损坏无法启动的问题解决

您所在的位置:网站首页 sw050 雅马哈 Mysql数据库意外崩溃导致表数据文件损坏无法启动的问题解决

Mysql数据库意外崩溃导致表数据文件损坏无法启动的问题解决

2024-07-16 01:59:39| 来源: 网络整理| 查看: 265

问题故障:Mysql数据库意外崩溃,一直无法启动数据库。报错日志:

启动报错:service mysqld restartERROR! MySQL server PID file could not be found!Starting MySQL. ERROR! The server quit without updating PID file (/www/wdlinux/mysql/var/iZ2358oz5deZ.pid).

数据库error日志:200719 22:07:43 InnoDB: Database was not shut down normally!InnoDB: Starting crash recovery.InnoDB: Reading tablespace information from the .ibd files...InnoDB: Error: trying to add tablespace 840 of name './ob_wp/ob_termmeta.ibd'InnoDB: to the tablespace memory cache, but tablespaceInnoDB: 840 of name './dev_nss/dg_queue.ibd' already exists in the tablespaceInnoDB: memory cache!200719 22:07:43 mysqld_safe mysqld from pid file /www/wdlinux/mysql/var/iZ2358oz5deZ.pid ended

提示:数据库启动时读取表空间信息时,ob-wp库中的表ob_users.ibd表数据文件已存在于表空间中。

拓展:存储引擎是myisam, 在数据库目录下会看到3类文件:.frm、.myi、.myd       (a) *.frm--表定义,是描述表结构的文件。      (b) *.MYD--"D"数据信息文件,是表的数据文件。      (c) *.MYI--"I"索引信息文件,是表数据文件中任何索引的数据树存储引擎是InnoDB, 在data目录下会看到2类文件:.frm、.ibd     (a) *.frm--表结构的文件。     (b) *.ibd--表数据文件

出处:https://www.cnblogs.com/liucx/

方法一:根据提示信息判定该InnoDB表损坏,于是尝试将dev_nss库目录中的表结构和表数据文件备份mv ob_termmeta.ibd ob_termmeta.ibd,bakmv ob_termmeta.frm ob_termmeta.frm.bak然后重启了下mysql,发现还是无法启动,提示其他表数据文件已存在,连续3次将已损坏的文件备份,还是无法启动。故放弃此方法。

方法二:1.查阅官网文档,在mysql配置文件中/etc/my.cnf添加配置,成功启动[mysqld]innodb_force_recovery = 1

2.备份数据库mysqldump -h172.168.2.100 -uroot -p -A > mysql_all_bak.sql如遇报表不存在,mysqldump可以添加参数:--force ,跳过错误

3.删除数据库drop database hxdb; 或者将数据库数据库目录 mv hxdb hxdb_bak (保险)

4.去掉参数 innodb_force_recovery将之前设置的参数去掉后,重新启动数据库

5.导入数据mysql -uroot -p < mysql_all_bak.sqlWarning: Using a password on the command line interface can be insecure.ERROR 1050 (42S01) at line 25: Table '`hxdb`.`tb_info`' already exists

如果提示表已经存在,这是因为将innodb_force_recovery参数去掉后,数据库会进行回滚操作,会生成相应的ibd文件,所以需要将该文件删除掉,删除后重新导入mysql -uroot -p < mysql_all_bak.sql

注:innodb_force_recovery参数解释:崩溃恢复模式,通常只有在严重故障排除情况下才会改变。可以的值是从0到6。

只有在紧急情况下才将这个变量设置为大于0的值,这样你才能启动InnoDB并转储你的表。作为一种安全措施,当innodb_force_recovery大于0时,InnoDB可以防止插入、更新或删除操作。在5.6.15,innodb_force_recovery设置为4或更大,将InnoDB设置为只读模式。由于relay_log_info_repository=TABLE和master_info_repository=TABLE在InnoDB表中存储信息,这些限制可能导致复制管理命令失败并出现错误。

innodb_force_recovery默认情况下为0(正常启动而不强制恢复)。允许的非零值 innodb_force_recovery是1到6。较大的值包括较小值的功能。例如,值3包含值1和2的所有功能。如果能够转储 innodb_force_recovery值为3或更小的表,则相对安全的是,仅丢失损坏的单个页面上的某些数据。4或更大的值被认为是危险的,因为数据文件可能会永久损坏。值6被认为是过分的,因为数据库页面处于过时状态,这反过来可能会使B树 和其他数据库结构遭受更多破坏。

为了安全起见,请InnoDB防止 INSERT, UPDATE或 DELETE在innodb_force_recovery大于0 时进行操作 。从MySQL 5.6.15开始, 在只读模式下innodb_force_recovery设置4个或更多位置InnoDB。1 (SRV_FORCE_IGNORE_CORRUPT)让服务器运行,即使它检测到一个损坏的页面。尝试让SELECT * FROM tbl_name跳过损坏的索引记录和页面,这有助于转储表。2 (SRV_FORCE_NO_BACKGROUND)阻止主线程和任何清除线程运行。如果在清除操作期间发生崩溃,则此恢复值将防止崩溃。3 (SRV_FORCE_NO_TRX_UNDO)在崩溃恢复后不运行事务回滚。4 (SRV_FORCE_NO_IBUF_MERGE)防止插入缓冲区合并操作。如果它们会导致崩溃,就不要做。不计算表统计信息。此值可能永久损坏数据文件。使用此值后,准备删除并重新创建所有二级索引。在MySQL 5.6.15中,将InnoDB设置为只读。5 (SRV_FORCE_NO_UNDO_LOG_SCAN)启动数据库时不要查看撤销日志:InnoDB甚至会将未完成的事务视为已提交。此值可能永久损坏数据文件。在MySQL 5.6.15中,将InnoDB设置为只读。6 (SRV_FORCE_NO_LOG_REDO)在恢复时不执行重做日志前滚。此值可能永久损坏数据文件。使数据库页面处于过时状态,这反过来可能会给b -树和其他数据库结构带来更多损坏。在MySQL 5.6.15中,将InnoDB设置为只读。

出处:https://www.cnblogs.com/liucx/

参阅官网:https://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.htmlhttps://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_force_load_corrupted

希望能帮到你



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭